YES(?,O(n^1)) We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict Trs: { group3(@l) -> group3#1(@l) , group3#1(::(@x, @xs)) -> group3#2(@xs, @x) , group3#1(nil()) -> nil() , group3#2(::(@y, @ys), @x) -> group3#3(@ys, @x, @y) , group3#2(nil(), @x) -> nil() , group3#3(::(@z, @zs), @x, @y) -> ::(tuple#3(@x, @y, @z), group3(@zs)) , group3#3(nil(), @x, @y) -> nil() , zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) , zip3#1(::(@x, @xs), @l2, @l3) -> zip3#2(@l2, @l3, @x, @xs) , zip3#1(nil(), @l2, @l3) -> nil() , zip3#2(::(@y, @ys), @l3, @x, @xs) -> zip3#3(@l3, @x, @xs, @y, @ys) , zip3#2(nil(), @l3, @x, @xs) -> nil() , zip3#3(::(@z, @zs), @x, @xs, @y, @ys) -> ::(tuple#3(@x, @y, @z), zip3(@xs, @ys, @zs)) , zip3#3(nil(), @x, @xs, @y, @ys) -> nil() } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) The following argument positions are usable: Uargs(::) = {2} TcT has computed following constructor-restricted linear polynomial interpretation. [group3](x1) = 1 + 2*x1 [group3#1](x1) = 2*x1 [::](x1, x2) = 2 + x1 + x2 [group3#2](x1, x2) = 2*x1 [nil]() = 2 [group3#3](x1, x2, x3) = 2*x1 [tuple#3](x1, x2, x3) = 0 [zip3](x1, x2, x3) = 1 + 2*x1 + 2*x2 + 2*x3 [zip3#1](x1, x2, x3) = 2*x1 + 2*x2 + 2*x3 [zip3#2](x1, x2, x3, x4) = 2*x1 + 2*x2 + 2*x4 [zip3#3](x1, x2, x3, x4, x5) = 2*x1 + 2*x3 + 2*x5 This order satisfies following ordering constraints [group3(@l)] = 1 + 2*@l > 2*@l = [group3#1(@l)] [group3#1(::(@x, @xs))] = 4 + 2*@x + 2*@xs > 2*@xs = [group3#2(@xs, @x)] [group3#1(nil())] = 4 > 2 = [nil()] [group3#2(::(@y, @ys), @x)] = 4 + 2*@y + 2*@ys > 2*@ys = [group3#3(@ys, @x, @y)] [group3#2(nil(), @x)] = 4 > 2 = [nil()] [group3#3(::(@z, @zs), @x, @y)] = 4 + 2*@z + 2*@zs > 3 + 2*@zs = [::(tuple#3(@x, @y, @z), group3(@zs))] [group3#3(nil(), @x, @y)] = 4 > 2 = [nil()] [zip3(@l1, @l2, @l3)] = 1 + 2*@l1 + 2*@l2 + 2*@l3 > 2*@l1 + 2*@l2 + 2*@l3 = [zip3#1(@l1, @l2, @l3)] [zip3#1(::(@x, @xs), @l2, @l3)] = 4 + 2*@x + 2*@xs + 2*@l2 + 2*@l3 > 2*@l2 + 2*@l3 + 2*@xs = [zip3#2(@l2, @l3, @x, @xs)] [zip3#1(nil(), @l2, @l3)] = 4 + 2*@l2 + 2*@l3 > 2 = [nil()] [zip3#2(::(@y, @ys), @l3, @x, @xs)] = 4 + 2*@y + 2*@ys + 2*@l3 + 2*@xs > 2*@l3 + 2*@xs + 2*@ys = [zip3#3(@l3, @x, @xs, @y, @ys)] [zip3#2(nil(), @l3, @x, @xs)] = 4 + 2*@l3 + 2*@xs > 2 = [nil()] [zip3#3(::(@z, @zs), @x, @xs, @y, @ys)] = 4 + 2*@z + 2*@zs + 2*@xs + 2*@ys > 3 + 2*@xs + 2*@ys + 2*@zs = [::(tuple#3(@x, @y, @z), zip3(@xs, @ys, @zs))] [zip3#3(nil(), @x, @xs, @y, @ys)] = 4 + 2*@xs + 2*@ys > 2 = [nil()] Hurray, we answered YES(?,O(n^1))